/*******************************************************
  > Copyright (C) 2024 ==iot== All rights reserved.
  > File Name: 1---client.c
  > Author: wyf
  > Created Time: 2024年08月13日 星期二 12时15分32秒
 ***************************************************/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h> //目录名获取配合DIR
#include <assert.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h> //文件控制操作
#include <sys/types.h> //获取pid等
#include <sys/wait.h> //等待子进程结束
#include <time.h> //时间获取
#include <sys/ipc.h> //进程通信
#include <sys/msg.h> //消息队列
#include <sys/shm.h> //共享内存
#include <signal.h> //信号处理
#include <pthread.h> //线程
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
//   1、开发一个计算服务器，能够计算两个整数的加减乘除
//字符串格式：##add#23#12##


int main(int argc, char *argv[])
{
	int sock = 0;
	int ret = 0;
	char buf[1024] = { 0 };
	int op = 0;
	int number1 = 0;
	int number2 = 0;
	int result = 0;
	struct sockaddr_in serAddr;
	memset(&serAddr, 0, sizeof(serAddr));

	sock = socket(AF_INET, SOCK_DGRAM, 0);
	if (sock == -1)
	{
		perror("sock");
		exit(-1);
	}
	printf("请输入-------加：1\t减：2\t乘：3\t除：4\n");
	scanf("%d", &op);
	serAddr.sin_family = AF_INET;
	serAddr.sin_port = 5493;
	serAddr.sin_addr.s_addr = inet_addr("192.168.48.128");
	int len = sizeof(serAddr);



	printf("请输入第一个数：");
	scanf("%d", &number1);
	getchar();
	printf("请输入第二个数：");
	scanf("%d", &number2);
	getchar();
	switch (op)
	{
	case 1:
		sprintf(buf, "##add#%d#%d##", number1, number2);//加
		printf("发送的数据：%s\n", buf);
		ret = sendto(sock, buf, strlen(buf), 0, (struct sockaddr *)&serAddr, sizeof(serAddr));
		if (ret == -1)
		{
			perror("sendto");
			exit(-1);
		}
		ret = recvfrom(sock, &result, sizeof(result), 0, (struct sockaddr*)&serAddr, &len);
		if (ret == -1)
		{
			perror("recvfrom");
			exit(-1);
		}
		printf("计算结果：%d\n", result);
		break;
	case 2:
		sprintf(buf, "##sub#%d#%d##", number1, number2);//减
		printf("发送的数据：%s\n", buf);
		ret = sendto(sock, buf, strlen(buf), 0, (struct sockaddr*)&serAddr, sizeof(serAddr));
		if (ret == -1)
		{
			perror("sendto");
			exit(-1);
		}
		ret = recvfrom(sock, &result, sizeof(result), 0, (struct sockaddr*)&serAddr, &len);
		if (ret == -1)
		{
			perror("recvfrom");
			exit(-1);
		}
		printf("计算结果：%d\n", result);
		break;
	case 3:
		sprintf(buf, "##che#%d#%d##", number1, number2);//乘
		printf("发送的数据：%s\n", buf);
		ret = sendto(sock, buf, strlen(buf), 0, (struct sockaddr*)&serAddr, sizeof(serAddr));
		if (ret == -1)
		{
			perror("sendto");
			exit(-1);
		}
		ret = recvfrom(sock, &result, sizeof(result), 0, (struct sockaddr*)&serAddr, &len);
		if (ret == -1)
		{
			perror("recvfrom");
			exit(-1);
		}
		printf("计算结果：%d\n", result);
		break;
	case 4:
		sprintf(buf, "##div#%d#%d##", number1, number2);//除
		printf("发送的数据：%s\n", buf);
		ret = sendto(sock, buf, strlen(buf), 0, (struct sockaddr*)&serAddr, sizeof(serAddr));
		if (ret == -1)
		{
			perror("sendto");
			exit(-1);
		}
		ret = recvfrom(sock, &result, sizeof(result), 0, (struct sockaddr*)&serAddr, &len);
		if (ret == -1)
		{
			perror("recvfrom");
			exit(-1);
		}
		printf("计算结果：%d\n", result);
		break;
	default:
		break;
	}
	
	close(sock);
	return 0;

}



